home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Internet Tools 1993 July / Internet Tools.iso / RockRidge / mail / pp / pp-6.0 / Lib / table / tb_checkauth.c < prev    next >
Encoding:
C/C++ Source or Header  |  1991-12-18  |  1.7 KB  |  73 lines

  1. /* tb_checkauth.c: authentication checks for submission */
  2.  
  3. # ifndef lint
  4. static char Rcsid[] = "@(#)$Header: /xtel/pp/pp-beta/Lib/table/RCS/tb_checkauth.c,v 6.0 1991/12/18 20:24:28 jpo Rel $";
  5. # endif
  6.  
  7. /*
  8.  * $Header: /xtel/pp/pp-beta/Lib/table/RCS/tb_checkauth.c,v 6.0 1991/12/18 20:24:28 jpo Rel $
  9.  *
  10.  * $Log: tb_checkauth.c,v $
  11.  * Revision 6.0  1991/12/18  20:24:28  jpo
  12.  * Release 6.0
  13.  *
  14.  */
  15.  
  16.  
  17.  
  18. #include        "util.h"
  19. #include        "chan.h"
  20.  
  21. #define         MAX_USER_ARGS           5
  22. #define         MAX_USERIDS             50
  23.  
  24. extern char *crypt ();
  25.  
  26. /* ---------------------  Begin  Routines  -------------------------------- */
  27.  
  28. int tb_checkauth (key, channel, username, passwd)
  29. char            *key;
  30. CHAN            *channel;
  31. char            *username;
  32. char            *passwd;
  33. {
  34.     int     argc, argc2;
  35.     char    *argv [MAX_USER_ARGS],
  36.         *argv2[MAX_USERIDS],
  37.         buf [BUFSIZ];
  38.     int     i;
  39.  
  40.     PP_DBG (("Lib/tb_checkauth (%s, %s)", key, channel -> ch_name));
  41.  
  42.     if (channel -> ch_auth_tbl == NULL) {
  43.         PP_LOG (LLOG_EXCEPTIONS,
  44.             ("Warning: Channel %s (%s) doesn't have an authentication table",
  45.             channel -> ch_name, channel -> ch_show));
  46.         return OK;
  47.     }
  48.  
  49.     if (tb_k2val (channel -> ch_auth_tbl, key, buf, TRUE) == NOTOK)
  50.         return (NOTOK);
  51.  
  52.     if ((argc = sstr2arg (buf, MAX_USER_ARGS, argv, "|")) == NOTOK)
  53.         return (NOTOK);
  54.  
  55.     if (username && argc > 1) {
  56.         if ((argc2 = sstr2arg (argv[1], MAX_USERIDS, argv2, ","))
  57.             == NOTOK)
  58.             return NOTOK;
  59.  
  60.         for (i = 0;  i < argc2; i++)
  61.             if (lexequ (argv2[i], username) == 0)
  62.                 return OK;
  63.     }
  64.  
  65.     if (passwd && argc > 2) {
  66.         if (strcmp (passwd, crypt (passwd, argv[2])) == 0)
  67.             return OK;
  68.     }
  69.     PP_LOG(LLOG_EXCEPTIONS, ("Username %s not allowed for %s on chan %s",
  70.                  username, key, channel -> ch_name));
  71.     return (NOTOK);
  72. }
  73.